home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / c / genmo112.lha / GTB-Modula / GenModula / GenerateITexts.mod < prev    next >
Encoding:
Modula Implementation  |  1993-09-28  |  6.7 KB  |  264 lines

  1. IMPLEMENTATION MODULE GenerateITexts;
  2.  
  3. (*
  4.  * -------------------------------------------------------------------------
  5.  *
  6.  *    :Program.    GenModula
  7.  *    :Contents.    A Modula 2 Sourcecode generator for GadToolsBox
  8.  *
  9.  *    :Author.    Reiner B. Nix
  10.  *    :Address.    Geranienhof 2, 50769 Köln Seeberg
  11.  *    :Address.    rbnix@pool.informatik.rwth-aachen.de
  12.  *    :Copyright.    Reiner B. Nix
  13.  *    :Language.    Modula-2
  14.  *    :Translator.    M2Amiga A-L V4.2d
  15.  *    :Imports.    GadToolsBox, NoFrag  by Jaan van den Baard
  16.  *    :Imports.    InOut, NewArgSupport by Reiner Nix
  17.  *    :History.    this programm is a direct descendend from
  18.  *    :History.     OG (Oberon Generator) 37.11 by Thomas Igracki, Kai Bolay
  19.  *    :History.    GenModula 1.10 (23.Aug.93)    ;M2Amiga 4.0d
  20.  *    :History.    GenModula 1.12 (28.Sep.93)    ;M2Amiga 4.2d
  21.  *
  22.  * -------------------------------------------------------------------------
  23.  *)
  24.  
  25. FROM    String            IMPORT    FirstPos,
  26.                     Copy, Concat;
  27. FROM    Conversions        IMPORT    ValToStr;
  28. FROM    FileMessage        IMPORT    StrPtr;
  29. FROM    GraphicsD        IMPORT    jam1, jam2,
  30.                     DrawModes, DrawModeSet;
  31. FROM    IntuitionD        IMPORT    IntuiTextPtr;
  32. FROM    IntuitionL        IMPORT    IntuiTextLength;
  33. FROM    FileOut            IMPORT    Write, WriteString, WriteLn,
  34.                     WriteCard, WriteInt, WriteHex;
  35. FROM    GadToolsBox        IMPORT    maxFontName,
  36.                     GTConfigFlags,
  37.                     ProjectWindowPtr;
  38. FROM    GeneratorIO        IMPORT    dfile, mfile, args,
  39.                     Gui, MainConfig, CConfig, Projects,
  40.                     WriteFill, SeekBack, WriteText;
  41.  
  42.  
  43. PROCEDURE WriteITextsDefs    (    pw            :ProjectWindowPtr);
  44.  
  45.  
  46.   PROCEDURE CountITexts        (    itext        :IntuiTextPtr) :CARDINAL;
  47.  
  48.   VAR    numTexts        :CARDINAL;
  49.  
  50.   BEGIN
  51.   numTexts := 0;
  52.   WHILE itext # NIL DO
  53.     INC (numTexts);
  54.     itext := itext^.nextText
  55.     END;
  56.  
  57.   RETURN numTexts
  58.   END CountITexts;
  59.  
  60.  
  61. (* WriteITextDef *)
  62. BEGIN
  63. IF pw^.windowText # NIL THEN
  64.   WriteString (mfile, "\t");
  65.   WriteString (mfile, pw^.name);
  66.   WriteString (mfile, "IText");
  67.   WriteFill   (mfile, pw^.name, 5);
  68.   WriteString (mfile, ":ARRAY [1..");
  69.   WriteCard   (mfile, CountITexts (pw^.windowText), 2);
  70.   WriteString (mfile, "] OF IntuiText;");
  71.   WriteLn (mfile);
  72.   END
  73. END WriteITextsDefs;
  74.  
  75.  
  76.  
  77. PROCEDURE WriteITextsProcs    (    pw            :ProjectWindowPtr);
  78.  
  79.  
  80.   PROCEDURE WriteITextsInit    (    pw            :ProjectWindowPtr);
  81.  
  82.   VAR    text            :IntuiTextPtr;
  83.       numText,
  84.       bleft, btop        :CARDINAL;
  85.       error            :BOOLEAN;
  86.       i            :INTEGER;
  87.       AttrSize        :ARRAY [0..5] OF CHAR;
  88.       AttrName        :ARRAY [0..maxFontName] OF CHAR;
  89.  
  90.  
  91.  
  92.     PROCEDURE WriteDrawMode    (    mode        :DrawModeSet);
  93.  
  94.     BEGIN
  95.     IF (jam2 * mode) # DrawModeSet {} THEN
  96.       WriteString (mfile, "jam2")
  97.     ELSE
  98.       WriteString (mfile, "jam1")
  99.       END;
  100.  
  101.     IF (complement IN mode) OR (inversvid IN mode) THEN
  102.       WriteString (mfile, " + DrawModeSet {");
  103.       IF complement IN mode THEN
  104.         WriteString (mfile, "complement, ")
  105.         END;
  106.       IF inversvid IN mode THEN
  107.         WriteString (mfile, "inversvid, ")
  108.         END;
  109.       SeekBack (mfile, 2);
  110.       WriteString (mfile, "}")
  111.       END
  112.     END WriteDrawMode;
  113.  
  114.  
  115.  
  116.   (* WriteITextsInit *)
  117.   BEGIN
  118.   IF pw^.windowText # NIL THEN
  119.     bleft := pw^.leftBorder;
  120.     btop  := pw^.topBorder;
  121.  
  122.     Copy (AttrName, Gui.fontName);
  123.     i := FirstPos (AttrName, 0, ".");
  124.     IF i # -1 THEN
  125.       AttrName[i] := 0C
  126.       END;
  127.     ValToStr (Gui.font.ySize, FALSE, AttrSize, 10, 1, " ", error);
  128.     Concat (AttrName, AttrSize);
  129.  
  130.  
  131.     WriteLn (mfile);
  132.     WriteString (mfile, "PROCEDURE Init");
  133.     WriteString (mfile, pw^.name);
  134.     WriteString (mfile, "ITexts;");
  135.     WriteLn (mfile);
  136.     WriteLn (mfile);
  137.  
  138.  
  139.     WriteString (mfile, "BEGIN");
  140.     WriteLn (mfile);
  141.  
  142.  
  143.     text := pw^.windowText;
  144.     numText := 1;
  145.     WHILE text # NIL DO
  146.       WriteString (mfile, "WITH ");
  147.       WriteString (mfile, pw^.name);
  148.       WriteString (mfile, "IText[");
  149.       WriteCard   (mfile, numText, 2);
  150.       WriteString (mfile, "] DO");
  151.       WriteLn (mfile);
  152.  
  153.       WriteString (mfile, "  frontPen  := ");
  154.       WriteCard   (mfile, text^.frontPen, 2);
  155.       Write       (mfile, ";");
  156.       WriteLn (mfile);
  157.  
  158.       WriteString (mfile, "  backPen   := ");
  159.       WriteCard   (mfile, text^.backPen, 2);
  160.       Write       (mfile, ";");
  161.       WriteLn (mfile);
  162.  
  163.       WriteString (mfile, "  drawMode  := ");
  164.       WriteDrawMode (text^.drawMode);
  165.       Write       (mfile, ";");
  166.       WriteLn (mfile);
  167.  
  168.       WriteString (mfile, "  iText     := ADR ('");
  169.       WriteText   (mfile, StrPtr (text^.iText)^);
  170.       WriteString (mfile, "');");
  171.       WriteLn (mfile);
  172.  
  173.  
  174.       IF FontAdapt IN MainConfig.configFlags0 THEN
  175.         WriteString (mfile, "  iTextFont := Font;");
  176.         WriteLn (mfile);
  177.  
  178.         WriteString (mfile, "  leftEdge  := OffX + ComputeX (");
  179.         WriteCard   (mfile, text^.leftEdge + (IntuiTextLength (text) DIV 2) - INTEGER (bleft), 3);
  180.         WriteString (mfile, ") - (IntuiTextLength (ADR (");
  181.         WriteString (mfile, pw^.name);
  182.         WriteString (mfile, "IText[");
  183.         WriteCard   (mfile, numText, 2);
  184.         WriteString (mfile, "])) DIV 2);");
  185.         WriteLn (mfile);
  186.  
  187.         WriteString (mfile, "  topEdge   := OffY + ComputeY (");
  188.         WriteCard   (mfile, text^.topEdge + INTEGER (Gui.font.ySize DIV 2) - INTEGER (btop), 3);
  189.         WriteString (mfile, ") - INTEGER (Font^.ySize DIV 2);");
  190.         WriteLn (mfile)
  191.  
  192.       ELSE
  193.         WriteString (mfile, "  iTextFont := ADR (");
  194.         WriteString (mfile, AttrName);
  195.         WriteString (mfile, ");");
  196.         WriteLn (mfile);
  197.  
  198.         WriteString (mfile, "  leftEdge  := ");
  199.         WriteCard   (mfile, text^.leftEdge - INTEGER (bleft), 3);
  200.         Write       (mfile, ";");
  201.         WriteLn (mfile);
  202.  
  203.         WriteString (mfile, "  topEdge   := ");
  204.         WriteCard   (mfile, text^.topEdge - INTEGER (btop), 3);
  205.         Write       (mfile, ";");
  206.         WriteLn (mfile)
  207.         END;
  208.  
  209.  
  210.       WriteString (mfile, "  nextText  := ");
  211.       IF text^.nextText # NIL THEN
  212.         WriteString (mfile, "ADR (");
  213.         WriteString (mfile, pw^.name);
  214.         WriteString (mfile, "IText[");
  215.         WriteCard   (mfile, numText + 1, 2);
  216.         WriteString (mfile, "]);")
  217.       ELSE
  218.         WriteString (mfile, "NIL")
  219.         END;
  220.       WriteLn (mfile);
  221.  
  222.       WriteString (mfile, "  END;");
  223.       WriteLn (mfile);
  224.  
  225.  
  226.       text := text^.nextText;
  227.       INC (numText)
  228.       END;
  229.  
  230.  
  231.     WriteString (mfile, "END Init");
  232.     WriteString (mfile, pw^.name);
  233.     WriteString (mfile, "ITexts;");
  234.     WriteLn (mfile);
  235.     WriteLn (mfile)
  236.     END
  237.   END WriteITextsInit;
  238.  
  239.  
  240. (* WriteITextsProcs *)
  241. BEGIN
  242. WriteITextsInit (pw)
  243. END WriteITextsProcs;
  244.  
  245.  
  246.  
  247. PROCEDURE WriteITextsInits    (    pw            :ProjectWindowPtr);
  248.  
  249. BEGIN
  250.  
  251. (* ----------------------------------------------------------------------
  252.  *
  253.  * ACHTUNG: die Initialisierung von XXITexts muss bei jedem Öffnen des
  254.  *  Fensters aufs neue erfolgen. Der Aufruf erfolgt daher in
  255.  *  CreateXXWindow!
  256.  *
  257.  * ----------------------------------------------------------------------
  258.  *)
  259. END  WriteITextsInits;
  260.  
  261.  
  262. END GenerateITexts.
  263.  
  264.